package com.woniuxy.amusementparkos.controller.lsy;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.woniuxy.amusementparkos.dto.lvd.TableDataDto;
import com.woniuxy.amusementparkos.entity.lsy.ConsumerType;
import com.woniuxy.amusementparkos.exception.ObjectNotExistException;
import com.woniuxy.amusementparkos.service.lsy.ConsumerTypeService;

import lombok.extern.slf4j.Slf4j;

/**
* @author Muzi
* 消费类型控制器
* 2020年4月26日下午2:08:00
*/
@Controller
@RequestMapping("/consumertype")
@Slf4j
public class ConsumerTypeController {
	@Autowired
	ConsumerTypeService consumerTypeService;
	
	@ResponseBody
	@RequestMapping("/updateOne")
	public TableDataDto<ConsumerType> updateOne(ConsumerType consumerType){
		TableDataDto<ConsumerType> result = new TableDataDto<>();
		try {
			// 调用service层完成修改操作
			consumerTypeService.updateOnrConsumerType(consumerType);
		} catch (ObjectNotExistException e) {
			// 设置异常操作的状态
			result.setCode(3);
			// 设置提示信息
			result.setMsg(e.getMessage());
			// 记录日志
			log.warn("ConsumerType控制器deleteOne操作发生异常："+e);
			return result;
		} catch (RuntimeException e) {
			// 设置异常操作的状态
			result.setCode(3);
			// 设置提示信息
			result.setMsg("操作异常，请检查提交数据后重试或联系管理员");
			// 记录日志
			log.warn("ConsumerType控制器deleteOne操作发生异常："+e);
			return result;
		}
		// 记录日志
		log.info("消费类型更新成功，更新后的为："+consumerType);
		// 成功操作状态码
		result.setCode(1);
		// 成功操作提示信息
		result.setMsg("更新成功");
		return result;
	}
	
	/**
	 * 删除消费类型控制器
	 * @param type_id 删除的目标对象id
	 * @return 操作结果，状态码，提示信息
	 */
	@ResponseBody
	@RequestMapping("/deleteOne")
	public TableDataDto<ConsumerType> deleteOne(Integer type_id){
		TableDataDto<ConsumerType> result = new TableDataDto<>();
		//捕获异常
		try {
			consumerTypeService.deleteOneConsumerType(type_id);
		} catch (RuntimeException e) {
			// 设置提示信息
			result.setMsg("删除失败，类型正被使用");
			// 设置状态码
			result.setCode(3);
			// 记录日志
			log.warn("ConsumerType控制器deleteOne操作发生异常："+e);
			return result;
		}
		// 记录成功操作日志
		log.info("消费类型删除成功，被删除的编号是："+type_id);
		//设置操作信息
		result.setMsg("删除成功");
		//设置状态吗
		result.setCode(1);
		return result;
	}
	
	
	/**
	 * @param consumerType添加一个消费类型
	 * @return 含添加结果，及提示信息的数据类型
	 */
	@RequestMapping("/insertOne")
	@ResponseBody
	public TableDataDto<ConsumerType> insertOneConsumerType(ConsumerType consumerType){
		//System.out.println(consumerType);
		TableDataDto<ConsumerType> result = new TableDataDto<>();
		// 调用service层，操作业务
		consumerTypeService.insertOneConsumerType(consumerType);
		// 记录成功操作日志
		log.info("新增消费类型成功，新增的是："+consumerType);
		// 设置提示信息
		result.setMsg("添加成功");
		//设置成功代码
		result.setCode(1);
		return result;
	}
	
	@RequestMapping("/getall")
	@ResponseBody
	public TableDataDto<ConsumerType> listAllConsumerType(){
		TableDataDto<ConsumerType> result = new TableDataDto<>();
		//执行查找
		List<ConsumerType> types = consumerTypeService.listAllConsumerTypes();
		//设置响应码（获取数据的状态码是0）
		result.setCode(0);
		//填充数据
		result.setData(types);
		return result;
	}
	
	/**
	 * 访问消费类型页面的
	 * @return 资源路径
	 */
	@RequestMapping("/show")
	public ModelAndView show() {
		return new ModelAndView("lsy/consumertype");
	}
	 /**
     * 控制器统一异常处理器
     * @param e
     * @return
     */
    @ExceptionHandler(Exception.class)
    public TableDataDto<Integer> resolveException(Exception e){
    	// 创建对象
    	TableDataDto<Integer> result = new TableDataDto<>();
    	// 设置参数
    	result.setMsg("操作异常，请重试或联系管理员");
    	// 记录日志
    	log.error("ConsumerTypeController发生严重异常："+e.getMessage()+e);
    	// 设置状态
		result.setCode(4);
    	return result;
    }
}
